import axios from 'axios'

// 创建axios实例
const api = axios.create({
  baseURL: '/api', // 使用代理
  timeout: 10000 // 增加请求超时时间到10秒
})

// 请求拦截器
api.interceptors.request.use(
  config => {
    // 从localStorage获取token
    const token = localStorage.getItem('token')
    if (token) {
      // 将token添加到请求头，使用Bearer前缀
      config.headers['Authorization'] = 'Bearer ' + token
    }
    return config
  },
  error => {
    return Promise.reject(error)
  }
)

// 响应拦截器
api.interceptors.response.use(
  response => {
    return response.data
  },
  error => {
    if (error.response) {
      // 处理401未授权的情况
      if (error.response.status === 401) {
        localStorage.removeItem('token')
        window.location.href = '/login'
      }
      return Promise.reject(error.response.data)
    }
    return Promise.reject(error)
  }
)

// 认证相关的API
export const authAPI = {
  // 用户登录
  login: (username, password) => {
    return api.post('/login', {
      username,
      password
    })
  },

  // 用户注册
  register: (username, password) => {
    return api.post('/signUp', {
      username,
      password
    })
  },

  // 获取当前用户信息
  getCurrentUser: () => {
    return api.get('/api/auth/current-user')
  },

  // 退出登录
  logout: () => {
    localStorage.removeItem('token')
  }
}

// 聊天相关的API
export const chatAPI = {
  // 发送聊天消息，适配/ali流式接口
  async sendMessage(prompt, chatId, deepThinking = false) {
    const token = localStorage.getItem('token')
    const response = await fetch(`/api/openChat?prompt=${encodeURIComponent(prompt)}&chatId=${encodeURIComponent(chatId)}&deepThinking=${deepThinking ? 1 : 0}`, {
      method: 'GET',
      headers: {
        'Authorization': 'Bearer ' + token // 添加Bearer前缀
      }
    })

    if (!response.ok) {
      // 处理不同的HTTP状态码
      if (response.status === 401) {
        throw new Error('登录过期，请重新登录')
      } else if (response.status === 500) {
        // 尝试读取响应体来检查是否是token错误
        try {
          const errorText = await response.text()
          if (errorText.includes('token 无效') || errorText.includes('token无效')) {
            throw new Error('登录过期，请重新登录')
          }
        } catch (e) {
          // 如果无法读取响应体，使用默认错误
        }
        throw new Error('服务器内部错误')
      } else {
        throw new Error('AI接口请求失败')
      }
    }

    // 返回流式读取器
    return response.body.getReader()
  },

  // 获取聊天历史
  getHistory: () => {
    return api.get('/api/chat/history')
  }
}

// 保存单条消息到历史
export const saveMessage = (userId, chatId, role, content, timestamp) => {
  // 发送 POST 请求到后端保存消息
  return api.post('/saveMessage', { userId, chatId, role, content, timestamp })
}

// 获取所有历史聊天内容 (使用你提供的接口路径)
export const getAllHistory = (userId) => {
  // 传递 userId 参数，返回所有历史会话及消息
  return api.get('/getHistory', { params: { userId } })
}

export default api 